/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package persistencia;

import videogest.Promocion;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.*;
import java.util.*;
import java.text.*;
import videogest.*;
import java.util.Date;

/**
 *
 * @author Administrador
 */
public class persistenciaPromocion {

    public static void alta(Promocion promocion) {

        int i = 0;
        Connection con = null;
        Statement st = null;
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        String fechaInicio = df.format(promocion.getFechaIncio());
        String fechaFin = df.format(promocion.getFechaFin());
        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();

            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");

            st = (Statement) con.createStatement();

            String sSql;
            sSql = "insert into promocion values('" + promocion.getCodigoPromocion() + "','" + promocion.getNombre() + "','" + fechaInicio
                    + "','" + fechaFin + "'," + promocion.getDescuento() + ",'" + promocion.isBaja() + "')";

            i = st.executeUpdate(sSql);


            for (Producto p : promocion.getProductos()) {
                sSql = "insert into promocionproducto values('" + promocion.getCodigoPromocion() + "','" + p.getCodigo() + "')";

                i = st.executeUpdate(sSql);
            }

        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciacion. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        } finally {
            try {
                st.close();
                con.close();

            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexion. Detalle del Error!!");
                System.out.println(ex);
            }
        }

        if (i > 0) {
            System.out.println("Se ha grabado correctamente la insercion en la base de datos.");
        } else {
            System.out.println("ERROR! No se ha podido grabar la insercion en la base de datos.");
        }
    }

    public static void modificar(Promocion promocion) {
         int i = 0;
        Connection con = null;
        Statement st = null;
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");
            st = (Statement) con.createStatement();
            String sSql;
            sSql = "update promocion set codigoPromocion='" + promocion.getCodigoPromocion() + "',nombre='" + promocion.getNombre()
                    + "', fechainicio ='" + df.format(promocion.getFechaIncio()) + "', fechafin='" + df.format(promocion.getFechaFin()) + "',descuento="
                    + promocion.getDescuento() +", baja='" + promocion.isBaja() + "';";

            i = st.executeUpdate(sSql);

        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciacion. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        } finally {
            try {
                st.close();
                con.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexi�n. Detalle del Error!!");
                System.out.println(ex);
            }
        }

        if (i > 0) {
            System.out.println("Se ha grabado correctamente la modificacion en la base de datos.");
        } else {
            System.out.println("ERROR! No se ha podido grabar la modificacion en la base de datos.");
        }
    }

    public static Promocion damePromocion(String codigoProm) throws FileNotFoundException, IOException {
        Promocion promocion = null;
        List<Promocion> lpromocion = new ArrayList();
        String codigoPromo = null;
        String nombrep = null;
        Date fechaI = null;
        Date fechaF = null;
        float desc = 0f;
        boolean baja;
        Producto producto = null;
        String codproducto = null;
        List<Producto> lproductos = null;
        char[] codigoChar;
        ResultSet rs = null;
        Statement st = null;
        ResultSet rs2 = null;
        Connection con = null;

        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");
            st = (Statement) con.createStatement();
            String Ssql="select * from promocion where codigopromocion='" + codigoProm + "'";
            rs = st.executeQuery(Ssql);

            while(rs.next()){
            codigoPromo = rs.getString("codigopromocion");
            nombrep = rs.getString("nombre");
            fechaI = rs.getDate("fechaInicio");
            fechaF = rs.getDate("fechaFin");
            desc = rs.getFloat("descuento");
            baja = Boolean.valueOf(rs.getString("baja"));
            promocion = new Promocion(codigoProm, nombrep, fechaI, fechaF, desc, lproductos);
            }
        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciacion. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        } finally {
            try {
                rs.close();
               // rs2.close();
                st.close();
                con.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexion. Detalle del Error!!");
                System.out.println(ex);
            }
        }
        return promocion;

    }

    public static List<String> getCodigoPromociones(String codigo) {
        Connection con = null;
        ResultSet rs = null;
        Statement st = null;
        List<String> lcodigoPromocion = new ArrayList();
        boolean encontrado = false;

        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");
            st = (Statement) con.createStatement();
            rs = st.executeQuery("select * from promocionproducto where codigoproducto='" + codigo + "';");


            while (rs.next()) {
                lcodigoPromocion.add(rs.getString("codigopromocion"));
            }




        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciacion. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        } finally {
            try {
                rs.close();

                st.close();
                con.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexion. Detalle del Error!!");
                System.out.println(ex);
            }
        }
        return lcodigoPromocion;
    }

    public static float calculadescuento(List<String> lcodigos) {
         float descuento = 0;
        Statement st = null;
        ResultSet rs = null;
        Connection con = null;
        if (lcodigos.isEmpty()) {
            System.out.println("No existen descuentos");
        } else {



            for (int i = 0; i < lcodigos.size(); i++) {



                try {

                    Class.forName("com.mysql.jdbc.Driver").newInstance();
                    con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");
                    st = (Statement) con.createStatement();
                    rs = st.executeQuery("select * from promocion where codigopromocion='" + lcodigos.get(i)+"' AND baja='false' ;");


                    while (rs.next()) {
                        descuento = rs.getFloat("descuento");
                    }




                } catch (InstantiationException ex) {
                    //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
                    System.out.println("Error de Instanciacion. Detalle del error!!");
                    System.out.println(ex);
                } catch (IllegalAccessException ex) {
                    //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
                    System.out.println("Error de Acceso. Detalle del error!!");
                    System.out.println(ex);
                } catch (SQLException ex) {
                    //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
                    System.out.println("Error de SQL. Detalle del error!!");
                    System.out.println(ex);
                } catch (ClassNotFoundException ex) {
                    //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
                    System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
                    System.out.println(ex);
                } finally {
                    try {
                        rs.close();

                        st.close();
                        con.close();
                    } catch (SQLException ex) {
                        //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                        System.out.println("Error de SQL, al cerrar la conexion. Detalle del Error!!");
                        System.out.println(ex);
                    }
                }

            }

        }
        return descuento;
    }

    public static List<String> dameProductosPromocion(String codigo) throws IOException, ParseException {
        List<String> listaProducto=new ArrayList();


        Connection con = null;
        ResultSet rs = null;
        Statement st = null;
        List<String> lcodigoPromocion = new ArrayList();
        boolean encontrado = false;
        String aux;
        Producto producto=null;

        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");
            st = (Statement) con.createStatement();
            rs = st.executeQuery("select * from promocionproducto where codigopromocion='" + codigo + "';");


            while (rs.next()) {
                aux=rs.getString("codigoproducto");
                producto=producto.dameProducto(aux);
                lcodigoPromocion.add(producto.getNombre());
            }




        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciacion. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        } finally {
            try {
                rs.close();

                st.close();
                con.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexion. Detalle del Error!!");
                System.out.println(ex);
            }
        }
        return lcodigoPromocion;
    }


}
